function shooting2
% Solves the BVP using shooting with RK4
% y'' = f(x,y,y') for xL < x < xr '
% where
% y(xl) = yL and y(xR) = yR
% clear all previous variables and plots
clear *
clf
% set boundary conditions and parameters
xL=0; yL=1;
xR=1; yR=1;
% define title and axes used in plot
hold on
xlabel('x-axis','FontSize',14,'FontWeight','bold')
ylabel('Solution','FontSize',14,'FontWeight','bold')
title('BVP: Shooting with RK4 and Secant Method','FontSize',14,'FontWeight','bold')
% have MATLAB use certain plot options (all are optional)
box on
axis([0 1 0 1]);
set(gca,'ytick',[0 0.2 0.4 0.6 0.8 1.0]);
% Set the fontsize to 14 for the plot
set(gca,'FontSize',14);
% loop used to increase N value
for in=1:3
% set number of points along the x-axis
if in==1
n=10;
elseif in==2
n=20;
elseif in==3
n=120;
end
% generate the points along the x-axis, x(1)=xL and x(n+2)=xR
x=linspace(xL,xR,n+2);
h=x(2)-x(1);
% calculate and then plot solution
sa=(yR-yL)/(xR-xL);
y0=[yL sa];
y=rk4('de_f',x,y0,h,n+2);
ga=y(n+2)-yR;
if sa==0
sb=1;
else
sb=0.1*sa;
end;
y0=[yL sb];
y=rk4('de_f',x,y0,h,n+2);
gb=y(n+2)-yR;
% secant method
tol=0.000001;
counter=0;
while abs(sa-sb)>tol
counter=counter+1;
sc=sb-(sb-sa)*gb/(gb-ga);
y0=[yL sc];
y=rk4('de_f',x,y0,h,n+2);
gc=y(n+2)-yR;
sa=sb; ga=gb;
sb=sc; gb=gc;
end;
error1=y(n+2)-yR;
fprintf('\n n = %3.0f\n Secant Iterations = %2.0f, Error at x = 1: %7.2e\n',n,counter,error1)
% plot the solution
if in==1
plot(x,y,'--r','LineWidth',1,'MarkerSize',7)
legend(' N = 10',3);
set(findobj(gcf,'tag','legend'),'FontSize',14,'FontWeight','bold');
pause
elseif in==2
plot(x,y,'--b','LineWidth',1,'MarkerSize',7)
legend(' N = 10',' N = 20',3);
set(findobj(gcf,'tag','legend'),'FontSize',14,'FontWeight','bold');
pause
elseif in==3
plot(x,y,'--m','LineWidth',1,'MarkerSize',7)
legend(' N = 10',' N = 20',' N = 120',3);
end
% Set legend font to 14/bold
set(findobj(gcf,'tag','legend'),'FontSize',14,'FontWeight','bold');
end
hold off
function g=q(x)
ep=0.01; g=-1/ep;
function g=p(x)
ep=0.01; g=-x^2/ep;
function g=f(x)
g=0;
% right-hand side of DE
function z=de_f(x,y)
z=[y(2) -p(x)*y(2)-q(x)*y(1)+f(x)];
% RK4 method
function ypoints=rk4(f,x,y0,h,n)
y=y0;
ypoints=y0(1);
for i=2:n
k1=h*feval(f,x(i-1),y);
k2=h*feval(f,x(i-1)+0.5*h,y+0.5*k1);
k3=h*feval(f,x(i-1)+0.5*h,y+0.5*k2);
k4=h*feval(f,x(i),y+k3);
yy=y+(k1+2*k2+2*k3+k4)/6;
ypoints=[ypoints, yy(1)];
y=yy;
end;